package com.github.chirspan.xaas.core.rest;

import lombok.Data;

/**
 * 统一返回Rest风格的数据结构
 *
 * @author chenpan
 */
@Data
public class RestResult {
    /**
     * 请求是否成功（这个字段不需要，可以不加）
     */
    private boolean success;
    /**
     * 成功或者失败的code错误码
     */
    private String code;
    /**
     * 成功时返回的数据，失败时返回具体的异常信息
     */
    private Object data;
    /**
     * 请求失败返回的提示信息，给前端进行页面展示的信息
     */
    private Object msg;
    /**
     * 服务器当前时间（添加该字段的原因是便于查找定位请求时间，因为实际开发过程中服务器时间可能跟本地时间不一致，加上这个时间戳便于日后定位）
     */
    private Long currentTime;

    public RestResult() {
    }

    public RestResult(boolean success, String code, Object data, Object msg) {
        this.success = success;
        this.code = code;
        this.data = data;
        this.msg = msg;
        this.currentTime = System.currentTimeMillis();
    }

    public RestResult(RestResultStatus status, Object data) {
        this(status, status.getMsg(), data);

    }

    public RestResult(RestResultStatus status, Object msg, Object data) {
        this(false, String.valueOf(status.getCode()), data, msg);
        if (RestResultStatus.OK.equals(status)) {
            this.success = true;
        } else {
            this.success = false;
        }
    }

    public RestResult(RestResultStatus status) {
        this(status, null);
    }

    public static RestResult OK(Object data, Object msg) {
        return new RestResult(true, "200", data, msg);
    }

    public static RestResult OK(Object data) {
        return new RestResult(true, "200", data, "请求成功");
    }

    public static RestResult fail(Object data, Object msg) {
        return new RestResult(false, "400", data, msg);
    }
}